﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Collections.Generic;
using Biciq.Datos;
using System.Linq;

namespace Biciq.Silverlight.UI
{
    public class SeguimientoEstacionesVistaModelo:VistaModeloBase
    {
        #region Comandos
        /// <summary>
        /// Metodo que refresca los estados de las Estaciones.
        /// </summary>
        private RelayCommand _comandoActualizar;


        public RelayCommand ComandoActualizar
        {
            get
            {
                if (_comandoActualizar == null)
                {
                    _comandoActualizar = new RelayCommand
                    (
                        p => ConsultarEstaciones()
                    );
                }
                return _comandoActualizar;
            }
        }
        #endregion

        #region Constructores
        /// <summary>
        /// Metodo que muestra la vista de Estaciones.
        /// </summary>
        public SeguimientoEstacionesVistaModelo()
        {
            
            InicializarMensajesError();
            
            ConsultarEstaciones();

            _refershtimer.Tick += new EventHandler(_RefreshDIspatchtimer_Tick);
            _refershtimer.Interval = TimeSpan.FromSeconds(10);
            _refershtimer.Start();


        }
        #endregion

        #region Campos
        /// <summary>
        /// Muestra la Lista de estaciones.
        /// </summary>
        private List<Estacion> _estaciones;
        private Estacion _estacionSeleccionada;
        public static System.Windows.Threading.DispatcherTimer _refershtimer = new System.Windows.Threading.DispatcherTimer();
        public static DateTime AppTimer = DateTime.Now;
       
        
        #endregion

        #region Propiedades
        public Estacion EstacionSeleccionada
        {
            get { return _estacionSeleccionada; }
            set 
            { 
                _estacionSeleccionada = value;
                RaisePropertyChanged("EstacionSeleccionada");
            }
        }

        public List<Estacion> Estaciones
        {
            get { return _estaciones; }
            set
            {
                _estaciones = value;
                RaisePropertyChanged("Estaciones");
            }
        }
        #endregion

        #region Métodos Privados
        void _RefreshDIspatchtimer_Tick(object sender, EventArgs e)
        {
            try
            {

                if ((System.DateTime.Now - AppTimer) > new TimeSpan(0, 5, 0))
                {

                    AppTimer = DateTime.Now;
                    ConsultarEstaciones();

                }
            }
            catch (Exception ex)
            {

            }
        }


        private void ConsultarEstaciones()
        {
            try
            {
                
                Procesando = true;
                BiciqContexto.Estacions.Clear();
                BiciqContexto.EstacionBiciletas.Clear();
                BiciqContexto.Bicicletas.Clear();
                BiciqContexto.Load(BiciqContexto.ConsultarEstacionesQuery()).Completed += delegate
                {
                    
                    Estaciones = BiciqContexto.Estacions.OrderBy(e => e.Numero).ToList();
                    foreach (var item in Estaciones)
                    {
                        item.numeroBicicletas = item.EstacionBiciletas.Count;
                    }
                    Procesando = false;
                };

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                throw;
            }
        }
        #endregion
    }
}
